// import cleanData from './dataCleaner.js'
// 生成数学模拟数据
const shuxueMockData = []
const knowledgeShortcomingsList = [
  '函数：需加强',
  '几何：需巩固',
  '代数运算：需提高',
  '概率统计：需强化',
  '三角函数：需理解',
  '数列：需熟练',
  '立体几何：需突破',
  '解析几何：需深入',
  '向量：需掌握',
  '导数：需精进',
  '不等式：需加强',
  '复数：需熟悉',
  '排列组合：需练习',
  '极限：需领悟',
  '数学归纳法：需运用',
  '逻辑推理：需提升',
  '数据处理：需加强',
  '图形变换：需掌握',
  '方程求解：需提高',
  '数学建模：需学习'
]

const names = ['张', '王', '李', '赵', '陈', '刘', '杨', '黄', '周', '吴', '郑', '孙', '马', '朱', '胡', '林', '郭', '何', '高', '罗', '梁', '宋', '唐', '许', '邓', '冯', '韩', '曹', '曾', '彭', '萧', '蔡', '潘', '田', '董', '袁', '于', '余', '叶', '蒋', '杜', '苏', '魏', '程', '吕', '丁', '沈', '任', '姚', '卢']
const secondNames = [
  // 单名
  '伟', '芳', '娜', '敏', '静', '丽', '强', '磊', '军', '洋', '勇', '艳', '杰', '娟', '涛', '明', '超', '辉', '玲', '华', '红', '燕', '飞', '龙', '云', '晶', '鑫', '欣', '婷', '雪',
  // 双名 - 传统组合
  '秀英', '秀兰', '秀珍', '秀华', '秀芳', '秀梅', '秀琴', '秀霞', '秀云', '秀芬',
  '志强', '志明', '志华', '志勇', '志刚', '志伟', '志军', '志国', '志强', '志强',
  '文静', '文华', '文娟', '文英', '文芳', '文霞', '文丽', '文秀', '文英', '文华',
  '春华', '春芳', '春梅', '春燕', '春霞', '春兰', '春英', '春丽', '春秀', '春华',
  '玉华', '玉芳', '玉梅', '玉霞', '玉兰', '玉英', '玉丽', '玉秀', '玉华', '玉芳',
  // 双名 - 现代组合
  '子涵', '子轩', '子墨', '子琪', '子萱', '子晴', '子怡', '子欣', '子悦', '子琪',
  '雨晴', '雨欣', '雨彤', '雨菲', '雨涵', '雨轩', '雨泽', '雨辰', '雨桐', '雨琪',
  '梦琪', '梦瑶', '梦婷', '梦洁', '梦华', '梦雪', '梦露', '梦菲', '梦涵', '梦琪',
  '思琪', '思涵', '思雨', '思彤', '思怡', '思颖', '思远', '思源', '思琪', '思涵',
  '佳琪', '佳怡', '佳欣', '佳颖', '佳悦', '佳琪', '佳涵', '佳彤', '佳琪', '佳怡',
  // 双名 - 寓意组合
  '浩然', '浩宇', '浩轩', '浩辰', '浩宇', '浩天', '浩宇', '浩宇', '浩宇', '浩宇',
  '晨曦', '晨光', '晨阳', '晨星', '晨露', '晨风', '晨光', '晨阳', '晨星', '晨露',
  '诗雨', '诗涵', '诗琪', '诗彤', '诗怡', '诗颖', '诗远', '诗源', '诗琪', '诗涵',
  '雅琪', '雅涵', '雅雨', '雅彤', '雅怡', '雅颖', '雅远', '雅源', '雅琪', '雅涵',
  '欣怡', '欣悦', '欣妍', '欣彤', '欣颖', '欣远', '欣源', '欣琪', '欣涵', '欣怡',
  // 双名 - 独特组合
  '梓涵', '梓轩', '梓墨', '梓琪', '梓萱', '梓晴', '梓怡', '梓欣', '梓悦', '梓琪',
  '若曦', '若涵', '若雨', '若彤', '若怡', '若颖', '若远', '若源', '若琪', '若涵',
  '语嫣', '语涵', '语雨', '语彤', '语怡', '语颖', '语远', '语源', '语琪', '语涵',
  '瑾瑜', '瑾涵', '瑾雨', '瑾彤', '瑾怡', '瑾颖', '瑾远', '瑾源', '瑾琪', '瑾涵',
  '悦然', '悦涵', '悦雨', '悦彤', '悦怡', '悦颖', '悦远', '悦源', '悦琪', '悦涵'
]

// 随机打乱数组
for (let i = secondNames.length - 1; i > 0; i--) {
  const j = Math.floor(Math.random() * (i + 1));
  [secondNames[i], secondNames[j]] = [secondNames[j], secondNames[i]]
}

// 定义班级
const classes = ['初二(1)班', '初二(2)班', '初二(3)班', '初二(4)班']

// 用于记录已使用的名字组合
const usedNames = new Set()

// // 生成随机数据的辅助函数
// function getRandomInt(min, max) {
//   return Math.floor(Math.random() * (max - min + 1)) + min
// }

// function getRandomFloat(min, max) {
//   return parseFloat((Math.random() * (max - min) + min).toFixed(2))
// }

// 生成学生姓名
const generateStudentName = (index) => {
  let nameIndex, secondNameIndex, fullName
  do {
    nameIndex = Math.floor(Math.random() * names.length)
    secondNameIndex = Math.floor(Math.random() * secondNames.length)
    fullName = names[nameIndex] + secondNames[secondNameIndex]
  } while (usedNames.has(fullName))

  usedNames.add(fullName)
  return fullName
}

// 为每个班级生成学生数据
classes.forEach(className => {
  for (let i = 1; i <= 250; i++) { // 每个班级250个学生，总共1000个
    const randomName = generateStudentName(i)
    // 调整成绩生成逻辑，让大部分成绩集中在 60 - 89 分
    let examScore
    const random = Math.random()
    if (random < 0.15) {
      // 15% 的概率生成 0 - 59 分（差）
      examScore = Math.floor(Math.random() * 60)
    } else if (random < 0.75) {
      // 60% 的概率生成 60 - 89 分（良好、一般）
      examScore = Math.floor(Math.random() * 30) + 60
    } else {
      // 25% 的概率生成 90 - 100 分（优秀）
      examScore = Math.floor(Math.random() * 11) + 90
    }

    // 引入脏数据：10% 的概率让成绩为 null
    if (Math.random() < 0.02) {
      examScore = null
    }

    // 确保上次考试成绩与这次考试成绩的差值在 -20 到 20 之间
    let previousExamScore = examScore !== null ? Math.max(0, Math.min(100, examScore + Math.floor(Math.random() * 41) - 20)) : null

    // 引入脏数据：10% 的概率让上次成绩为 null
    if (Math.random() < 0.02) {
      previousExamScore = null
    }

    const examDate = '2025-07-16'
    let status
    if (examScore === null) {
      status = '未知'
    } else if (examScore >= 90) {
      status = '优秀'
    } else if (examScore >= 70) {
      status = '良好'
    } else if (examScore >= 60) {
      status = '一般'
    } else {
      status = '差'
    }

    // 根据成绩和学习特征确定聚类类型
    let clusterType
    let homeworkAccuracy, videoWatchCount, interactionCount, weeklyStudyHours

    // 使用正态分布来生成更合理的数据分布
    const clusterRandom = Math.random()

    if (clusterRandom < 0.15) {
      // 15% 的优秀进取型
      clusterType = '优秀进取型'
      examScore = Math.floor(Math.random() * 11) + 90 // 90-100分
      homeworkAccuracy = Math.floor(Math.random() * 10) + 85 // 85-95%
      videoWatchCount = Math.floor(Math.random() * 8) + 12 // 12-20次
      interactionCount = Math.floor(Math.random() * 6) + 8 // 8-14次
      weeklyStudyHours = Math.floor(Math.random() * 10) + 50 // 50-60小时
    } else if (clusterRandom < 0.60) {
      // 45% 的稳定发展型
      clusterType = '稳定发展型'
      examScore = Math.floor(Math.random() * 20) + 70 // 70-89分
      homeworkAccuracy = Math.floor(Math.random() * 15) + 70 // 70-85%
      videoWatchCount = Math.floor(Math.random() * 6) + 8 // 8-14次
      interactionCount = Math.floor(Math.random() * 4) + 5 // 5-9次
      weeklyStudyHours = Math.floor(Math.random() * 10) + 40 // 40-50小时
    } else if (clusterRandom < 0.85) {
      // 25% 的潜力待发型
      clusterType = '潜力待发型'
      examScore = Math.floor(Math.random() * 10) + 60 // 60-69分
      homeworkAccuracy = Math.floor(Math.random() * 15) + 60 // 60-75%
      videoWatchCount = Math.floor(Math.random() * 4) + 5 // 5-9次
      interactionCount = Math.floor(Math.random() * 3) + 3 // 3-6次
      weeklyStudyHours = Math.floor(Math.random() * 10) + 35 // 35-45小时
    } else {
      // 15% 的困难提升型
      clusterType = '困难提升型'
      examScore = Math.floor(Math.random() * 20) + 40 // 40-59分
      homeworkAccuracy = Math.floor(Math.random() * 15) + 50 // 50-65%
      videoWatchCount = Math.floor(Math.random() * 3) + 2 // 2-5次
      interactionCount = Math.floor(Math.random() * 2) + 1 // 1-3次
      weeklyStudyHours = Math.floor(Math.random() * 10) + 30 // 30-40小时
    }

    // 引入异常数据
    if (Math.random() < 0.01) {
      // 1% 的概率让考试成绩为 null
      examScore = null
    }

    if (Math.random() < 0.01) {
      // 1% 的概率让聚类类型为无效值
      clusterType = '未知类型'
    }

    if (Math.random() < 0.01) {
      // 1% 的概率让作业准确率为 null
      homeworkAccuracy = null
    }

    if (Math.random() < 0.01) {
      // 1% 的概率让视频观看次数为负数
      videoWatchCount = -Math.floor(Math.random() * 5)
    }

    if (Math.random() < 0.01) {
      // 1% 的概率让互动次数为负数
      interactionCount = -Math.floor(Math.random() * 3)
    }

    if (Math.random() < 0.01) {
      // 1% 的概率让每周学习时长为无效值
      weeklyStudyHours = Math.random() < 0.5 ? 20 : 70
    }

    const gender = Math.random() > 0.5 ? '男' : '女'
    const age = Math.floor(Math.random() * 3) + 15 // 15 - 17 随机整数
    let attendanceRate = `${Math.floor(Math.random() * 10) + 90}%`

    // 引入脏数据：2% 的概率让出勤率为 null
    if (Math.random() < 0.02) {
      attendanceRate = null
    }

    const homeworkCompletionRate = `${Math.floor(Math.random() * 10) + 80}%`

    const item = {
      id: i,
      name: randomName,
      class: className,
      subject: '数学',
      examScore,
      examDate,
      status,
      clusterType,
      gender,
      age,
      attendanceRate,
      homeworkCompletionRate,
      previousExamScore,
      weeklyStudyHours,
      homeworkAccuracy,
      videoWatchCount,
      interactionCount
    }

    // // 生成随机的 weeklyStudyHours 数据
    // const randomHours = []
    // for (let j = 0; j < 12; j++) {
    //   // 根据聚类类型生成不同范围的学习时长
    //   let randomHour
    //   if (clusterType === '优秀进取型') {
    //     randomHour = Math.floor(Math.random() * 10) + 50 // 50-60小时
    //   } else if (clusterType === '稳定发展型') {
    //     randomHour = Math.floor(Math.random() * 10) + 40 // 40-50小时
    //   } else if (clusterType === '潜力待发型') {
    //     randomHour = Math.floor(Math.random() * 10) + 35 // 35-45小时
    //   } else {
    //     randomHour = Math.floor(Math.random() * 10) + 30 // 30-40小时
    //   }
    //   randomHours.push(randomHour)
    // }
    // item.weeklyStudyHours = randomHours

    const learningStyle = {
      language: Math.floor(Math.random() * 10) + 1,
      logic: Math.floor(Math.random() * 10) + 1,
      spatial: Math.floor(Math.random() * 10) + 1,
      musical: Math.floor(Math.random() * 10) + 1,
      bodily: Math.floor(Math.random() * 10) + 1,
      interpersonal: Math.floor(Math.random() * 10) + 1,
      intrapersonal: Math.floor(Math.random() * 10) + 1
    }
    const interestChange = {
      math: Array.from({ length: 5 }, () => Math.floor(Math.random() * 10) + 1),
      english: Array.from({ length: 5 }, () => Math.floor(Math.random() * 10) + 1),
      chinese: Array.from({ length: 5 }, () => Math.floor(Math.random() * 10) + 1)
    }
    item.learningStyle = learningStyle
    item.interestChange = interestChange
    const selectedShortcomings = []
    while (selectedShortcomings.length < 3) {
      const randomIndex = Math.floor(Math.random() * knowledgeShortcomingsList.length)
      const shortcoming = knowledgeShortcomingsList[randomIndex]
      if (!selectedShortcomings.includes(shortcoming)) {
        selectedShortcomings.push(shortcoming)
      }
    }
    item.knowledgeShortcomings = selectedShortcomings

    shuxueMockData.push(item)
  }
})

export default shuxueMockData
